package com.tom.demo.common.entity;

import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

/**
* 菜单信息表
* @TableName sys_menu
*/
@Data
@TableName(value = "sys_menu")
public class SysMenu implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
    * 菜单id
    */
    @TableId(value = "menu_id",type = IdType.ASSIGN_ID)
    @NotBlank(message="[菜单id]不能为空")
    @Size(max= 30,message="编码长度不能超过30")
    @ApiModelProperty("菜单id")
    @Length(max= 30,message="编码长度不能超过30")
    private String menuId;
    /**
    * 菜单名称
    */
    @NotBlank(message="[菜单名称]不能为空")
    @Size(max= 30,message="编码长度不能超过30")
    @ApiModelProperty("菜单名称")
    @Length(max= 30,message="编码长度不能超过30")
    private String menuName;
    /**
    * 父菜单ID
    */
    @Size(max= 30,message="编码长度不能超过30")
    @ApiModelProperty("父菜单ID")
    @Length(max= 30,message="编码长度不能超过30")
    private String parentId;
    /**
    * 显示顺序
    */
    @ApiModelProperty("显示顺序")
    private Integer orderNum;
    /**
    * 路由地址
    */
    @Size(max= 200,message="编码长度不能超过200")
    @ApiModelProperty("路由地址")
    @Length(max= 200,message="编码长度不能超过200")
    private String path;
    /**
    * 组件路径
    */
    @Size(max= 100,message="编码长度不能超过100")
    @ApiModelProperty("组件路径")
    @Length(max= 100,message="编码长度不能超过100")
    private String component;
    /**
    * 菜单类型（M目录 C菜单 F按钮）
    */
    @ApiModelProperty("菜单类型（M目录 C菜单 F按钮）")
    private String menuType;
    /**
    * 菜单状态（false显示 true隐藏）
    */
    @NotNull(message="[菜单状态（false显示 true隐藏）]不能为空")
    @ApiModelProperty("菜单状态（false显示 true隐藏）")
    private Boolean visible;
    /**
    * 菜单状态（false正常 true停用）
    */
    @NotNull(message="[菜单状态（false正常 true停用）]不能为空")
    @ApiModelProperty("菜单状态（false正常 true停用）")
    private Integer status;
    /**
    * 权限标识
    */
    @Size(max= 100,message="编码长度不能超过100")
    @ApiModelProperty("权限标识")
    @Length(max= 100,message="编码长度不能超过100")
    private String perms;
    /**
    * 菜单图标
    */
    @Size(max= 100,message="编码长度不能超过100")
    @ApiModelProperty("菜单图标")
    @Length(max= 100,message="编码长度不能超过100")
    private String icon;
    /**
     * 创建者
     */
    @Size(max= 64,message="编码长度不能超过64")
    @ApiModelProperty("创建者")
    @Length(max= 64,message="编码长度不能超过64")
    @TableField(fill = FieldFill.INSERT)//插入时自动填充字段
    private String createBy;
    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)//插入时自动填充字段
    private LocalDateTime createTime;
    /**
     * 更新者
     */
    @Size(max= 64,message="编码长度不能超过64")
    @ApiModelProperty("更新者")
    @Length(max= 64,message="编码长度不能超过64")
    @TableField(fill = FieldFill.UPDATE)//插入时自动填充字段
    private String updateBy;
    /**
     * 更新时间
     */
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.UPDATE)//插入时自动填充字段
    private LocalDateTime updateTime;
    /**
    * 备注
    */
    @Size(max= 500,message="编码长度不能超过500")
    @ApiModelProperty("备注")
    @Length(max= 500,message="编码长度不能超过500")
    private String remark;

    /**
     * 子菜单
     */
    @TableField(exist = false)
    private List<SysMenu> children;
}
